#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
#include<string>

using namespace std;

//int firstUniqChar(string s) 
//{
//    int a[26] = { 0 };
//    for (auto ch : s)
//    {
//        a[ch - 'a']++;
//    }
//    for (int i = 0; i < 26; i++)
//    {
//        if (a[i] == 1)
//        {
//            return s.find(i + 'a');
//        }
//    }
//    return -1;
//}
//
//int main()
//{
//    cout << firstUniqChar("leetcode") << endl;
//	return 0;
//}




//int main()
//{
//	string s1("xx");
//	string s2("hh");
//	// 1
//	string s3 = s1 + s2;
//	cout << s3 << endl;
//	// 2
//	s3 = s1 + "aaaa";
//	cout << s3 << endl;
//	// 3
//	s3 = "bbbbbb" + s2;
//	cout << s3 << endl;
//
//	return 0;
//}


//int main()
//{
//	string s1("xx");
//	string s2("hh");
//	cout << (s1 == s2) << endl;
//	cout << (s1 != s2) << endl;
//	cout << (s1 > s2) << endl;
//	cout << (s1 < s2) << endl;
//	cout << (s1 >= s2) << endl;
//	cout << (s1 <= s2) << endl;
//
//	return 0;
//}



//int main()
//{
//	string s1("xxhello world111");
//	string s2("hh");
//	cout << s1.capacity() << endl;
//	cout << s2.capacity() << endl;
//
//	swap(s1, s2);
//	cout << s1 << endl;
//	cout << s2 << endl;
//	cout << s1.capacity() << endl;
//	cout << s2.capacity() << endl;
//
//	return 0;
//}



//int main()
//{
//	string s;
//	getline(cin, s);
//	cout << s << endl;
//
//	return 0;
//}



//int main()
//{
//	string s;
//	cin >> s;
//	cout << s << endl;
//
//	return 0;
//}



//int main()
//{
//	string s1, s2;
//	cin >> s1 >> s2;
//	cout << s1 << endl;
//	cout << s2 << endl;
//
//	return 0;
//}



//int main()
//{
//	string s1, s2;
//	cin >> s1;
//	cin >> s2;
//	cout << s1 << endl;
//	cout << s2 << endl;
//
//	return 0;
//}



//int main()
//{
//	string s1("123.23");
//	int i = stoi(s1);
//	double d = stod(s1);
//	float f = stof(s1);
//
//	string s = to_string(i);
//
//	return 0;
//}




string multiply(string num1, string num2) {
    string max = num1.size() > num2.size() ? num1 : num2;
    string min = num1.size() > num2.size() ? num2 : num1;
    int next = 0;
    int flag = 0;
    int end1 = max.size() - 1;
    int end2 = min.size() - 1;
    string ret;
    if (num1 == "0" || num2 == "0")
    {
        return "0";
    }
    while (end2 >= 0)
    {
        //'9'
        int sum = 0;
        string tmp;
        next = 0;
        for (int i = end1; i >= 0; i--)
        {
            int mul = (max[i] - '0') * (min[end2] - '0') + next;
            //6*3=18     5*3+1=16   4*3+1=13
            //9*9+0=81   9*9+8=89
            next = mul / 10;//1  1  1          8  9
            tmp += '0' + mul % 10;//'8' '6' '3'      '1' '9' '8'
        }
        if (next > 0)
            tmp += '0' + next;
        end2--;
        reverse(tmp.begin(), tmp.end());
        for (int i = 0; i < flag; i++)
        {
            tmp += '0';
        }
        flag++;

        //+
        string tmp2 = ret;
        string tmp3;
        int tend1 = tmp.size() - 1;
        int tend2 = tmp2.size() - 1;
        int tnext = 0;
        while (tend1 >= 0 || tend2 >= 0)
        {
            //'3'
            int val1 = tend1 >= 0 ? tmp[tend1--] - '0' : 0;
            int val2 = tend2 >= 0 ? tmp2[tend2--] - '0' : 0;
            int sum = val1 + val2 + tnext;
            tnext = sum / 10;
            tmp3 += '0' + sum % 10;
        }
        if (tnext == 1)
            tmp3 += '1';
        reverse(tmp3.begin(), tmp3.end());
        ret = tmp3;
    }
    return ret;
}

int main()
{
    cout << multiply("123", "456") << endl;
    return 0;
}


























































